package h_eekwan.basic;

import java.util.Scanner;

import h_eekwan.module.J20_BookDBVO1;
import h_eekwan.service.J20_BookDBDAO1;

public class J20_BookDBMain1 {
	
	private static final String title = " :: 모든 Book데이터를 출력합니다.";
	private static final String menu = " :: <1>추가  <2>삭제  <3>수정  <4>조회 <0>끝내기";
	private static final String addmsg = " :: 책 제목, 출판사, 저자 순서대로 정보를 입력하시오.";
	private static final String modmsg1 = " :: 수정하고 싶은 Book의 id를 입력하시오.";
	private static final String modmsg2 = " :: <수정>id, 책 제목, 출판사, 저자 순서대로 정보를 입력하시오.";
	private static final String remmsg = " :: 삭제하실 id값을 입력하여 주십시오. ";
	
	
	// JDBC 서비스 클래스, 키보드입력 클래스는
	// 객체 생성없이 바로 사용할 수 있또록
	// static으로 선언
	private static J20_BookDBDAO1 srv = new J20_BookDBDAO1();
	private static Scanner sc = new Scanner(System.in);

	
	public static void main(String[] args) {
		
		while(true){
			
			
			System.out.println(menu);
			switch(sc.nextInt()){			
				case 0 : sc.close();
					System.exit(0);
					break;
				case 1 : addBookDB(sc, srv);
					break;
				case 2 : removeBookDB(sc, srv);
					break;
				case 3 : modifyBookDB(sc, srv);
				
				break;
				case 4 : showBookDB(srv);
				break;
			}	// switch
			
		}	//while
		
		
		
		
	}	// main 클래스에서 DAO클래스의 메서드를
		// 직접 호출하는 것은 OOP 개념에 다소 위배
	
		// 캡슐화와 보안, 유지보수 관점에서 볼 때
		// 서비스 객체를 하나 더 만들어
		// 그것을 통해 DAO클래스의 메서드를
		// 호출하는 것이 더 나음
	
		// 즉, Main -> DAO 보다는
		// Main -> service -> DAO 가 나음
	
		// DAO 클래스의 메서드를 호출하는
		// 서비스 메서드를 static으로 선언
		private static void showBookDB(J20_BookDBDAO1 srv){
			System.out.println(srv.selectBookDB());
			System.out.println(":: 성공적으로 데이터가 조회됨");
		}
		private static void addBookDB(Scanner sc, J20_BookDBDAO1 srv){
			System.out.println(addmsg);
			J20_BookDBVO1 bvo = new J20_BookDBVO1(sc.next(), sc.next(), sc.next(), sc.next());
			srv.addBookDB(bvo);
			System.out.println(":: 성공적으로 데이터 저장됨");
		}
		
		private static void modifyBookDB(Scanner sc, J20_BookDBDAO1 src){
			System.out.println(modmsg1);
			String id = sc.next();
			System.out.println(modmsg2);			
			J20_BookDBVO1 bvo = new J20_BookDBVO1(sc.next(), sc.next(), sc.next(), sc.next());
			bvo.setId(id);
			srv.modifyBookDB(bvo);
			System.out.println(":: 성공적으로 데이터 수정됨");
		}		
		private static void removeBookDB(Scanner sc, J20_BookDBDAO1 src){
			System.out.println(remmsg);
			String id = sc.next();
			srv.removeBookDB(id);
			System.out.println(":: 성공적으로 데이터 삭제됨 ");
		}
		
	
}	// class
